/**
 * MobX路径解析器
 * 专门用于MobX模块的路径处理，确保统一引用方式
 */

const pathResolver = require('./path_resolver.js');
const npmConfig = require('./npm_config.js');

/**
 * 获取mobx-miniprogram模块路径
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getMobxPath(context = 'page') {
  try {
    // 直接使用npm_config中的mobx
    return './npm_config';
  } catch (e) {
    console.error('无法获取mobx路径', e);
    return pathResolver.getNpmPath('mobx-miniprogram/index', context);
  }
}

/**
 * 获取mobx-miniprogram-bindings模块路径
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getMobxBindingsPath(context = 'page') {
  try {
    // 直接使用npm_config中的mobxBindings
    return './npm_config';
  } catch (e) {
    console.error('无法获取mobx-bindings路径', e);
    return pathResolver.getNpmPath('mobx-miniprogram-bindings/index', context);
  }
}

/**
 * 获取封装后的mobx-wx模块路径
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getMobxWxPath(context = 'page') {
  if (context === 'page') {
    return '../../../../../framework/mobx/mobx_wx';
  } else if (context === 'component') {
    return '../../framework/mobx/mobx_wx';
  } else {
    // service或其他上下文
    return '../../../../framework/mobx/mobx_wx';
  }
}

/**
 * 获取全局Store模块路径
 * @param {string} storeName - Store名称
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getGlobalStorePath(storeName, context = 'page') {
  if (context === 'page') {
    return `../../../../../store/global/${storeName}`;
  } else if (context === 'component') {
    return `../../store/global/${storeName}`;
  } else {
    // service或其他上下文
    return `../../../../store/global/${storeName}`;
  }
}

/**
 * 获取模块Store路径
 * @param {string} moduleName - 模块名称
 * @param {string} storeName - Store名称
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getModuleStorePath(moduleName, storeName, context = 'page') {
  if (context === 'page') {
    return `../../../../../store/modules/${moduleName}/${storeName}`;
  } else if (context === 'component') {
    return `../../store/modules/${moduleName}/${storeName}`;
  } else {
    // service或其他上下文
    return `../../../../store/modules/${moduleName}/${storeName}`;
  }
}

/**
 * 获取项目Store路径
 * @param {string} storeName - Store名称
 * @param {string} context - 调用上下文，可选值：'service', 'page', 'component'
 * @returns {string} 路径字符串
 */
function getProjectStorePath(storeName, context = 'page') {
  if (context === 'page') {
    return `../../../store/${storeName}`;
  } else if (context === 'component') {
    return `../../store/${storeName}`;
  } else {
    // service或其他上下文
    return `../store/${storeName}`;
  }
}

module.exports = {
  getMobxPath,
  getMobxBindingsPath,
  getMobxWxPath,
  getGlobalStorePath,
  getModuleStorePath,
  getProjectStorePath
}; 